package com.cgrs572.shortlink.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cgrs572.shortlink.project.dao.entity.ShortLinkDO;
import com.cgrs572.shortlink.project.dto.req.RecycleBinRecoverReqDTO;
import com.cgrs572.shortlink.project.dto.req.RecycleBinRemoveReqDTO;
import com.cgrs572.shortlink.project.dto.req.RecycleBinSaveReqDTO;
import com.cgrs572.shortlink.project.dto.req.ShortLinkRecycleBinPageReqDTO;
import com.cgrs572.shortlink.project.dto.resp.ShortLinkPageRespDTO;

/**
 * 回收站管理接口层（业务层）
 */
public interface RecycleBinService extends IService<ShortLinkDO> {
    /**
     * 保存回收站---将短链接放入回收站是逻辑删除，只需要将启用标识enableStatus设置为1，代表已禁用
     * 需要注意的是：该删除并未彻底删除，后续可以从回收站将其恢复，因为并未设置删除标识del_flag以及删除时间字段delTime的属性值
     * @param requestParam 请求参数
     */
    void saveRecycleBin(RecycleBinSaveReqDTO requestParam);

    /**
     * 分页查询回收站短链接
     * @param requestParam 分页查询短链接请求参数
     * @return 短链接分页返回结果
     */
    IPage<ShortLinkPageRespDTO> pageShortLink(ShortLinkRecycleBinPageReqDTO requestParam);

    /**
     * 回收站短链接恢复
     * @param requestParam 收站短链接恢复请求参数
     */
    void recoverRecycleBin(RecycleBinRecoverReqDTO requestParam);

    /**
     * 删除回收站短链接---将回收站中的短链接删除是逻辑删除。此时不仅要设置删除标识del_flag为1，还要设置删除时间字段delTime的属性值即可代表删除回收站短链接成功
     * 注意：由于加入回收站的短链接的启用标识enableStatus已设置为1，所以不需要在管启用标识了
     * @param requestParam 删除回收站短链接请求参数
     */
    void removeRecycleBin(RecycleBinRemoveReqDTO requestParam);
}
